# -*- coding: utf-8 -*-
"""
系统信息插件
显示系统相关信息
"""

import sys
import os
import platform
import psutil
from datetime import datetime

# 添加父目录到路径，以便导入core模块
sys.path.append(os.path.dirname(os.path.dirname(__file__)))

from core.plugin_manager import BasePlugin


class SystemInfoPlugin(BasePlugin):
    """系统信息插件"""
    
    def __init__(self):
        super().__init__()
        self.name = "sysinfo"
        self.version = "1.0.0"
        self.description = "显示系统信息，包括CPU、内存、磁盘等"
        
    def execute(self, args):
        """执行系统信息查看功能"""
        if args and args[0] == 'help':
            self.show_help()
            return True
            
        try:
            self.show_system_info()
        except Exception as e:
            print(f"获取系统信息时出错: {e}")
            print("可能需要安装 psutil 库: pip install psutil")
            
        return True
        
    def show_system_info(self):
        """显示系统信息"""
        print("\n" + "=" * 50)
        print("           系统信息")
        print("=" * 50)
        
        # 基本系统信息
        print(f"操作系统: {platform.system()} {platform.release()}")
        print(f"系统版本: {platform.version()}")
        print(f"处理器: {platform.processor()}")
        print(f"架构: {platform.architecture()[0]}")
        print(f"主机名: {platform.node()}")
        print(f"Python版本: {platform.python_version()}")
        
        # CPU信息
        print(f"\nCPU核心数: {psutil.cpu_count(logical=False)} 物理核心")
        print(f"CPU线程数: {psutil.cpu_count(logical=True)} 逻辑核心")
        print(f"CPU使用率: {psutil.cpu_percent(interval=1):.1f}%")
        
        # 内存信息
        memory = psutil.virtual_memory()
        print(f"\n内存总量: {self.bytes_to_gb(memory.total):.1f} GB")
        print(f"已使用内存: {self.bytes_to_gb(memory.used):.1f} GB")
        print(f"可用内存: {self.bytes_to_gb(memory.available):.1f} GB")
        print(f"内存使用率: {memory.percent:.1f}%")
        
        # 磁盘信息
        print(f"\n磁盘信息:")
        for partition in psutil.disk_partitions():
            try:
                usage = psutil.disk_usage(partition.mountpoint)
                print(f"  {partition.device}")
                print(f"    总空间: {self.bytes_to_gb(usage.total):.1f} GB")
                print(f"    已使用: {self.bytes_to_gb(usage.used):.1f} GB")
                print(f"    可用空间: {self.bytes_to_gb(usage.free):.1f} GB")
                print(f"    使用率: {(usage.used / usage.total * 100):.1f}%")
            except PermissionError:
                print(f"  {partition.device}: 无法访问")
                
        # 启动时间
        boot_time = datetime.fromtimestamp(psutil.boot_time())
        print(f"\n系统启动时间: {boot_time.strftime('%Y-%m-%d %H:%M:%S')}")
        
        print("=" * 50)
        
    def bytes_to_gb(self, bytes_value):
        """将字节转换为GB"""
        return bytes_value / (1024 ** 3)
        
    def show_help(self):
        """显示帮助信息"""
        print("\n=== 系统信息查看器使用说明 ===")
        print("用法: sysinfo")
        print("\n功能:")
        print("  显示操作系统信息")
        print("  显示CPU信息和使用率")
        print("  显示内存信息和使用率")
        print("  显示磁盘空间信息")
        print("  显示系统启动时间")
        print("\n注意: 需要安装 psutil 库")
        
    def get_help(self):
        """获取插件帮助信息"""
        return f"{self.name}: {self.description}\n  用法: sysinfo"